#include "cbb_delay.h"

// 紧凑型汇编优化
void cbb_delay_us(uint32_t us) {
    if (us == 0) return;
    
    // 计算实际需要的CPU周期数（考虑流水线效应）
    uint32_t cycles = us * (CYCLES_PER_US - 3);  // 补偿函数调用开销
    
    __asm volatile (
        "1:                     \n\t"  // 循环标签
        "   subs %0, %0, #3     \n\t"  // 1 cycle: 减少计数器
        "   bne  1b             \n\t"  // 2 cycles: 跳转（分支预测失败时）
        : "+r" (cycles)                // 输出操作数
        :                             // 输入操作数
        : "cc"                        // 破坏的寄存器
    );
}

void cbb_delay_ms(uint32_t u32MS)
{
    while (u32MS--) {
        cbb_delay_us(1000);
    }
}
